In cloud environments, it is usually needed to deploy a great number of virtual machines (VMs) in a relatively short time. Each of those VMs should be configured with its own configuration, such as Internet Protocol (IP) address, Domain Name Server (DNS) address, and other post-deployment configuration, as part of provisioning. In addition, those VMs should also be configured with some shared configuration, such as patches for an operating system. Therefore, deploying such a great number of virtual machines may be a time consuming task.
Conventionally, VMs are deployed one by one, which often requires extensive manual intervention. In this way, it is infeasible to achieve quick deployment of massive VMs without manual intervention. In addition, specific configuration for each of those VMs is usually located separately, while shared configuration for all of those VMs is usually stored centrally. Therefore, extra access overhead may be needed to retrieve both the specific and shared configurations for a VM, since they cannot be retrieved at one time due to their different locations. Moreover, the deployment of VMs is often controlled by a centralized manager over an IP-based network. However, the dependency on the centralized manager over the IP-based network will become a performance bottleneck, for example, due to heavy traffic over the IP-based network caused by simultaneous deployment of massive VMs.